public int intervalSchedule(int[][] intvs) {
    if (intvs.length == 0) return 0;
    // 按 end 升序排序
    Arrays.sort(intvs, new Comparator<int[]>() {
        public int compare(int[] a, int[] b) {
            return a[1] - b[1];
        }
    });
    // 至少有一个区间不相交
    int count = 1;
    // 排序后，第一个区间就是 x
    int x_end = intvs[0][1];
    for (int[] interval : intvs) {
        int start = interval[0];
        if (start >= x_end) {
            // 找到下一个选择的区间了
            count++;
            x_end = interval[1];
        }
    }
    return count;
}

//按照大佬的解题思路，返回的count应该是可以参加的最大活动数，那么此题要求的结果可以看做放弃参加的活动最小数
//返回值就为intvs.length-count;
//代码如下
		class Solution {
    public int eraseOverlapIntervals(int[][] intervals) {
        if(intervals.length==0) return 0;
        Arrays.sort(intervals,new Comparator<int[]>(){
            public int compare(int[] a,int[] b){
                return a[1]-b[1];
            }
        });
        int n=intervals.length;
        int count=1;
        int end=intervals[0][1];
        for(int[] array:intervals){
            if(array[0]>=end){
                count++;
                end=array[1];
            }
        }
    return n-count;
    }
}